local Employee = require("demo/class/Employee")   ---引入
local PrintUtil = require("util/PrintUtil")
require("demo.exception.exception")
---
local Developer = Employee:new()	--继承

---独有的写代码方法
function Developer:code()
    print(self.attr_str_name.."写代码")
end
---从任务列表取任务工作
function Developer:work()   --
    print("Developer name:"..self.attr_str_name.." 开始工作");
   -- print("Developer name:"..self.attr_str_name.." 单元测试");

    --assert(#(self.attr_list_work)==0,"任务不能为空")
    --assert(self.attr_list_work,"任务列表不能为空")

    if self.attr_list_work==nil or self.attr_list_work.length ==0 then
        print("任务列表没有工作")
        return
    end
    for index= 1,#self.attr_list_work
    do
        --assert(self.attr_list_work[index] ~=null,"任务不能为空")

        if type(self.attr_list_work[index]) == "string" then  ---如果是简单的string 任务
        print("正在做:>>["..self.attr_list_work[index].."]")
        elseif type(self.attr_list_work[index]) == "function" then ---如果是复杂的function 任务
         local flag
            local errinfo;
         flag =xpcall(self.attr_list_work[index],
             function(errinfo)   ----catch 异常函数

                     if errinfo and errinfo.code ~=nil then
                         print("捕获我们的自定义异常 错误码: " ..errinfo.code.."  错误消息: "..errinfo.msg)
                     end
                     print("执行任务失败 开始上报");
                     self:report(debug.traceback());  ----向上级报告消息
                 print("汇报完毕继续工作");
                 end,self );

            if flag then
                -- 没有错误
                print("正常执行完毕")
            else
                print("做了 但是有错误发生" )
                -- 一些错误
            end
        end


    end
    print("for循环结束所有工作完成")
end

function Developer:report(content)
    print(self.attr_str_name.."发现执行任务出错 开始向上级报告"..content);
end
--打印个人信息
function Developer:info()
    print("employee salary:"..(self.attr_num_salary).." name:".. self.attr_str_name .." id:".. self.attr_int_id.." code:".. self.attr_str_code.." birth:".. os.date("%Y-%m-%d %H:%M:%S'",os.time()));
end


return Developer